Я возвращаю набор данных из моей базы данных MS SQL 2008R2, который содержит таблицу данных, из которой я уже получаю данные в моем представлении Razor. Я добавил поле byte [], которое содержит миниатюру изображения, которое я пытаюсь отобразить в этом представлении.
Поскольку массив байтов относительно мал, я решил, что попытаюсь отобразить массив байтов в строке. Однако после прочтения могут быть некоторые проблемы, связанные с браузером, я отказался от этого.
Создание метода контроллера казалось правильным решением (оба метода найдены здесь ), однако у меня уже есть массив байтов, готовый к просмотру, и мне не нужно делать еще один вызов базы данных. чтобы получить его на основе идентификатора.
Это не работает по очевидным причинам:
... отображение других данных на странице ....
@if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] == null)
{
}
else
{
}
...
Метод контроллера:
[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetImage(byte[] imageBytes)
{
byte[] byteArray = imageBytes;
return new FileContentResult(byteArray, "image/jpeg");
}
... как это по сути пытается отправить массив байтов через http.
Итак, мой вопрос: поскольку у меня уже есть массив байтов в моем представлении Razor, как мне его отобразить?
- Обновление -
Я понимаю, что выполнять обработку в представлении не рекомендуется , но поскольку данные уже есть, нельзя сделать что-то подобное:
Response.Write((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]);
Или ...
Stream s = new MemoryStream(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
System.Drawing.Image img = new System.Drawing.Bitmap(s);
В других сообщениях я читал, что вы должны выполнить Response.Write (byte [] ... )) но в данном случае это не работает.
- ОБНОВЛЕНИЕ -
В моих постоянных поисках эффективности (отсутствие необходимости делать еще один запрос к базе данных) помощник WebImage кажется хорошим кандидатом. Один из его конструкторов примет массив байтов для инициализации класса, а затем, используя метод .Write ("jpeg"), я смогу увидеть изображение.
@{
WebImage webImage = new WebImage(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
webImage.Write("jpeg");
}
Проблема с использованием WebImage.Write () заключается в том, что после использования изображение - единственное, что отображается на странице. Есть ли способ отобразить это непосредственно в «элементе управления» на странице представления Razor?
- ОБНОВЛЕНИЕ -
Это продолжает вызывать у меня ошибки ... поэтому я попробовал следующее, которое, как я полагал, может сработать: поскольку это то, что мы делаем из Действия ...
if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] != DBNull.Value)
{
var img1 = new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]), "image/jpeg");
}
... не работает.